home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1997 January / Macworld (1997-01).dmg / Shareware World / Fonts / Metafont / Inputs / sromanu.mf < prev    next >
Text File  |  1994-08-19  |  2KB  |  55 lines

  1. % File:       MF Inputs sromanu.mf
  2. % Author:     Pierre A. MacKay
  3. % Internet:   mackay@cs.washington.edu
  4. % Date:       June 25, 1991
  5. %
  6. % This for the SLITeX fonts: lcmss8, lcmssb8, lcmssi8.
  7. % All characters in romanu.mf except I are generated
  8. % A special I with slab serifs is then substituted for the
  9. % normal, confusing, sans-serif I of cmss* fonts.
  10. % Based on the macros in the METAFONTbook, Appendix E,
  11. % page 307 & 312.  Just as in the case of the iff
  12. % macro, this depends on the expectation that every
  13. % character program will end with endchar.
  14.  
  15. string currenttitle;
  16. def exclude_I expr t =
  17.   currenttitle:= t;
  18.   if t = "The letter I" : let next_ = lose_it_
  19.   else: let next_ = use_it_ fi; next_ enddef;
  20. % Add _ to the macro names used by iff to avoid confusion.
  21. def use_it_ = relax; enddef;
  22. def lose_it_ = let endchar = fi; let ; = fix_ semi_
  23.   if false: enddef;
  24. let cmchar = exclude_I;
  25. input romanu
  26. let cmchar=relax;
  27.  
  28. % Uppercase I provided by Pierre A. MacKay, in June l986.
  29. % The I has slab serifs based on the proportions of
  30. % the upper and lower horizontals of upper case E.
  31.  
  32. cmchar "The letter I";
  33. beginchar("I",max(6u#,4u#+cap_stem#),cap_height#,0);
  34. italcorr cap_height#*slant-.25u#;
  35. adjust_fit(cap_serif_fit#,cap_serif_fit#);
  36. pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
  37. lft x1l=lft x2l=hround(.5w-.5cap_stem); top y1=h; bot y2=0;
  38. filldraw stroke z1e--z2e;   % stem
  39. pickup crisp.nib;           % arms based on proportions of uppercase E
  40. pos3(slab,90); pos4(slab if not serifs:+2stem_corr fi,-90);
  41. x3=x4=x1; top y3r=h; bot y4r=0;
  42. pos5(hair,0); pos6(hair,0); % top and bottom right arms
  43. rt x5r=rt x6r=hround(w-u);
  44. pos7(hair,180); pos8(hair,180); % top and bottom left arms
  45. lft x7r=lft x8r=hround(u);
  46. y5=y7=good.y(y3l-beak)-eps; % beak in case we ever want a beaked serif!
  47. y6=y8=good.y(y4l+beak)+eps; % watch that this doesn't get too heavy
  48. arm(3,5,a,darkness,jut); arm(3,7,b,darkness,jut); % top left and right arms
  49. arm(4,6,c,darkness,jut); arm(4,8,d,darkness,jut); % bottom left and right
  50. if serifs: dish_serif(1,2,a,1/3,1.05cap_jut,b,1/3,1.05cap_jut);  % upper serif
  51.  dish_serif(2,1,c,1/3,1.05cap_jut,d,1/3,1.05cap_jut);  fi % lower serif
  52. math_fit(0,.5ic#); penlabels(1,2,3,4,5,6,7,8); endchar;
  53.  
  54. endinput;
  55.